/**
 * 权限指令
 * 用法: v-hasPerms="'sys:user:add'"
 * 或: v-hasPerms="['sys:user:add', 'sys:user:edit']"
 */

export default {
    mounted(el, binding) {
        const { value } = binding

        // 获取当前用户的权限列表
        const permissions = getUserPermissions()

        console.log('v-hasPerms 指令被调用:', {
            '需要的权限': value,
            '用户拥有的权限': permissions,
            '元素': el
        })

        // 如果用户是超级管理员，拥有所有权限
        if (permissions.includes('*:*:*')) {
            console.log('v-hasPerms 超级管理员，拥有所有权限')
            return // 不移除元素
        }

        if (value && value instanceof Array && value.length > 0) {
            // 数组形式：需要满足其中一个权限
            const hasPermission = permissions.some(permission => {
                return value.includes(permission)
            })

            console.log('v-hasPerms 数组判断结果:', hasPermission)

            if (!hasPermission) {
                console.log('v-hasPerms 移除元素:', el)
                el.parentNode && el.parentNode.removeChild(el)
            }
        } else if (value) {
            // 字符串形式：需要完全匹配
            console.log('v-hasPerms 字符串匹配调试:', {
                'value': value,
                'value类型': typeof value,
                'permissions': permissions,
                'permissions类型': typeof permissions,
                'permissions是否为数组': Array.isArray(permissions),
                'permissions.length': permissions.length,
                'permissions[0]': permissions[0],
                'permissions.includes(value)': permissions.includes(value)
            })

            const hasPermission = permissions.includes(value)

            console.log('v-hasPerms 字符串判断结果:', {
                '需要的权限': value,
                '是否拥有': hasPermission
            })

            if (!hasPermission) {
                console.log('v-hasPerms 移除元素:', el)
                el.parentNode && el.parentNode.removeChild(el)
            }
        }
    }
}

/**
 * 获取当前用户的权限列表
 * 从 sessionStorage 中直接获取后端返回的按钮权限列表
 */
function getUserPermissions() {
    try {
        // 从 sessionStorage 获取后端返回的权限列表
        const permissions = JSON.parse(window.sessionStorage.getItem('permissions') || '[]')

        console.log('getUserPermissions 调试:', {
            'sessionStorage.permissions': window.sessionStorage.getItem('permissions'),
            '解析后的permissions': permissions,
            '类型': typeof permissions,
            '是否为数组': Array.isArray(permissions)
        })

        // 超级管理员拥有所有权限
        const currentUser = JSON.parse(window.sessionStorage.getItem('currentUser') || '{}')

        console.log('getUserPermissions 用户信息:', {
            'currentUser': currentUser,
            'is_superuser': currentUser.is_superuser,
            'username': currentUser.username
        })

        if (currentUser.is_superuser || currentUser.username === 'admin') {
            console.log('getUserPermissions 返回超级管理员权限')
            return ['*:*:*'] // 返回通配符，表示所有权限
        }

        console.log('getUserPermissions 返回普通用户权限:', permissions)
        return permissions
    } catch (error) {
        console.error('获取用户权限失败:', error)
        return []
    }
}

/**
 * 检查是否有某个权限（可在组件中使用）
 * @param {string|Array} value 权限标识
 * @returns {boolean}
 */
export function hasPermission(value) {
    const permissions = getUserPermissions()

    // 超级管理员
    if (permissions.includes('*:*:*')) {
        return true
    }

    if (value && value instanceof Array && value.length > 0) {
        return permissions.some(permission => value.includes(permission))
    } else if (value) {
        return permissions.includes(value)
    }

    return false
}
